<?php

namespace App\Http\Controllers\utils;

use App\Http\Controllers\BaseController;
use Illuminate\Support\Facades\Validator;

class Common extends BaseController
{
    /**
     * api接口 编辑
     * @param class $modelClass 模型类名
     * @param Request $request 请求参数
     * @param string $id
     */
    public function apiEdit($modelClass, $request,  $id)
    {
        try {
            //
            $params = $request->all();
            $validator = Validator::make($params, [
                'column' => 'required',
                'value' => 'required',
            ]);
            if ($validator->fails()) {
                return $this->responseData([], $validator->errors(), 400);
            }

            $column = $params['column'];
            $value = $params['value'];

            $questions = $modelClass::find($id);
            if (empty($questions)) {
                return
                    $this->responseData([], '数据不存在', 400);
            }

            $updateData = $modelClass::where("id", '=', $id)->update([$column => $value, 'id' => $id]);

            if (!$updateData) {
                return $this->responseData([], "$column 修改失败 可能是一下问题导致：
            1.网络问题.
            2.修改数据与原本数据一致.", 400);
            }
            return $this->responseData([], "$column 修改成功", 200);
        } catch (\Throwable $th) {
            $errorInfo = isset($th->errorInfo) ? $th->errorInfo : "这是一个html $th";
            $this->error_log(__FILE__, __LINE__, json_encode($errorInfo));
            return  $this->responseData($th, '系统错误', 400);
        }
    }

    /**
     * api接口 删除
     * @param class $modelClass 模型类名
     * @param Request $request 请求参数
     * @param string $id
     */
    public function apiDelete($modelClass, $request,  $id)
    {
        $data = $modelClass::find($id);
        if (empty($data)) {
            return
                $this->responseData([], '数据不存在', 400);
        }

        // if ($data->delete()) {
        //     return
        //         $this->responseData([], '数据删除成功', 200);
        // }
        // 这里先采用逻辑删除
        $updateData = $data->update(['status' => '-1']);
        if (!$updateData) {
            return   $this->responseData([], '数据删除失败', 400);
        }
        return   $this->responseData([], '数据删除成功', 200);
    }

    /**
     * api接口 添加
     * @param class $modelClass 模型类名
     * @param Request $request 请求参数
     * @param Array $needValidate  需要验证的字段列表 leg:
     *  [
            'title' => 'required',
     *   ]
     * @param Array $endParams 最终的参数 比如像时间状态这些都是由后端插入的所以需要在后续中添加的  非必传
     */
    public function apiAdd($modelClass, $request, $needValidate, $endParams = null)
    {
        $params = $request->all();
        // 如果 $endParams 为 null，将其设为 $request->all()
        $endParams = $endParams ?? $request->all();

        $validator = Validator::make($params, $needValidate);
        if ($validator->fails()) {
            return $this->responseData([], $validator->errors(), 400);
        } else {
            try {
                $addData = $modelClass::create($endParams);
                if ($addData) {
                    return $this->responseData([], '数据添加成功', 200);
                } else {
                    return
                        $this->responseData([], '数据添加失败', 400);
                }
            } catch (\Throwable $th) {
                //throw $th;
                $this->error_log(__FILE__, __LINE__, json_encode($th->errorInfo));
                return  $this->responseData($th->errorInfo, '系统错误', 400);
            }
        }
    }
}
